home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / language / embedded / mcu / float09.arc / CHECK.SA next >
Text File  |  1987-03-04  |  4KB  |  190 lines

  1. *
  2.  NAM CHECK
  3.  TTL ROUTINES TO CHECK SPECIAL CASES AND INVALID OPS.
  4. *
  5. * LINKING LOADER DEFINTIONS
  6. *
  7.   XDEF    CKINVD,CHKZER,CHKINF,DIVZER
  8. *
  9.   XREF    RTAR1,IOPSUB,RTINF,ISDNRM
  10. *
  11. * REVISION HISTORY:
  12. *   DATE    PROGRAMMER     REASON
  13. *
  14. *  23.MAY.80    G. STEVENS     ORIGINAL
  15. *  28.MAY.80    G. STEVENS     REWRITE CKINVD
  16. *  03.JUNE.80    G. STEVENS     MAKE CKINVD HANDLE NAN,ZEROS
  17. *                   AND INFINITIES CORRECTLY
  18. *  21.AUG.80    G. STEVENS     REMOVE IOP 17 FROM DIVZER
  19. *
  20.  PAGE
  21. *
  22. *  HERE ARE SOME OF THE COMPONENT ROUTINES
  23. * FOR THE FP09. THEY INCLUDE CHKZER, CHECK
  24. * ZERO AGAINST THE ROUNDING MODES; CHECK
  25. * CHECK INFINITY AGAINST A/P MODES OF
  26. * CLOSURE; DIVZER, HANDLES DIVISION BY ZERO;
  27. * RTNAN, BUILD UP A "NAN" WITH PROPER
  28. * NAN ADDRES INSERTED.
  29. *
  30. ***************************************************************
  31. *
  32. *  PROCEDURE CHKZER
  33. *
  34. *  THIS ROUTINE CHECKS ZERO AGAINST ROUNDING
  35. * MODES IN A FLP ADDITION WHEN BOTH OPERANDS
  36. * ARE ZERO IN ORDER TO RETURN A ZERO RESULT
  37. * OF THE CORRECT SIGN. IF SIGNS ARE THE SAME
  38. * A ZERO OF THAT SIGN IS RETURNED. IF THE
  39. * SIGN ARE OPPOSITE THEN +0 IS RETURNED
  40. * IN ROUDING MODES RN,RZ,RP AND -O IS
  41. * RETURNED IN ROUNDING MODE RM.
  42. *
  43. * RETURN A ZERO TO RESULT
  44. *
  45. CHKZER LBSR RTAR1
  46. *
  47. * NOW CHECK TO SEE IF THE SIGN NEEDS
  48. * MODIFYING.
  49. *
  50.  LDA  ARG1,U
  51.  EORA  ARG2,U
  52. *
  53. * IF THE SIGNS ARE NOT EQUAL, CHECK THE ROUNDING
  54. * MODE TO DETERMINE THE PROPER SIGN.
  55. *
  56.  IFCC LT
  57.    LDA    [PFPCB,U]
  58.    ANDA  #CTLRND  GET ROUNDING MODE INFO.
  59.    IF A,GE,#BIT1+BIT2  RM MODE
  60.      LDA  #BIT7
  61.      STA  RESULT,U  RETURN -0
  62. *
  63.    ELSE
  64.      CLR  RESULT,U  RETURN +0
  65.    ENDIF
  66.  ENDIF
  67. *
  68.  RTS  RETURN
  69. *
  70.  PAG
  71. *******************************************************************
  72. *
  73. *  PROCEDURE  CHKINF
  74. *
  75. *   THIS ROUTINE CHECKS INFINITY AGAINST
  76. * CLOSURE MODES IN A FLP ADDITION WHEN
  77. * BOTH OPERANDS ARE INFINITY TO DETERMINE
  78. * WHETHER TO RETURN INFINITY OR A NAN
  79. * WITH PROPER INVALID OPERATION CODE
  80. *
  81. *
  82. * CHECK FOR A/P MODES
  83. *
  84. CHKINF    LDA  [PFPCB,U]
  85.  ANDA  #BIT0
  86.  IFCC GT   AFFINE MODE
  87.    LDA    ARG1,U
  88.    EORA  ARG2,U
  89. *
  90. * IF SIGNS THE SAME RETURN INFINITY
  91. * OF THAT SIGN.
  92. *
  93.    IFCC GE
  94.      LBSR  RTAR1
  95. *
  96. * IF SIGNS DIFFER RETURN "NAN" AND
  97. * SET IOP = 2
  98. *
  99.    ELSE
  100.      IOP 2  (+INF)+(-INF); AFFINE MODE
  101.    ENDIF
  102. *
  103. * ELSE IN THE PROTECTIVE MODE RETURN NAN
  104. * AND SET IOP = 8
  105. *
  106.  ELSE
  107.    IOP    8  +/-    INF; PROTECTIVE MODE
  108.  ENDIF
  109. *
  110.  RTS  RETURN
  111. *
  112.  PAG
  113. ***************************************************************
  114. *
  115. * PROCEDURE  DIVZER
  116. *
  117. *  THIS ROUTINE HANDLES THE CASE OF DIVISION
  118. * BY ZERO.
  119. *
  120. * ON ENTRY: ARG2 CONTAINS A TRUE ZERO
  121. *        U - STACK FRAME POINTER
  122. *
  123. * ON EXIT: RESULT CONTAINS AN INFINITY W/
  124. *       SIGN OF THE INPUT ARGUMENT.
  125. *       U, S - UNCHANGED
  126. *       X,Y,D,CC - DESTROYED
  127. *
  128. * OPERATION: THE DIVISION BY ZERO FLAG IN TSTAT IS SET
  129. * AND AN INFINITY OF THE SIGN OF THE INPUT ARGUMENT IS
  130. * RETURNED IN THE STACK FRAME RESULT.
  131. *
  132. *
  133. * CHECK DIVISION BY ZERO TRAP ENABLE
  134. *
  135. DIVZER EQU  *
  136. *
  137.    BSETA  BIT3,(TSTAT,U)
  138.    LBSR  RTINF
  139. *
  140.  RTS   RETURN
  141. *
  142.  PAG
  143. ******************************************************************
  144. *
  145. * PROCEDURE  CKINVD
  146. *
  147. *     CKINVD CHECKS FOR AN INVALID RESULT OF AN ARITHMETIC
  148. * OPERATION. IF THE RESULTIS UNORMALIZED AND THE DESTINATION
  149. * IS SINGLE OR DOUBLE THEN SIGNAL IOP. = 16 AND RETURN A
  150. * NON TRAPPING NAN.
  151. *
  152. *
  153. CKINVD EQU  *
  154. *
  155. * CHECK FOR ZERO OR NAN OR INFINITY
  156. *
  157.  LDD  EXPR,U
  158.  IF  D,NE,#INFEX
  159.    IF  D,NE,#ZEROEX
  160. *
  161. * CHECK THE PRECISION OF THE RESULT
  162. *
  163.      LDA  RPREC,U
  164.      IF  A,LE,#DBL       SINGLE OR DOUBLE
  165.        LBSR  ISDNRM       CHECK FOR DENORMALZED
  166.        IFCC  EQ        RESULT IS DENORMALIZD
  167.      LDD  EXPR,U       SUBTRACT BIAS FROM EXPONENT
  168.      SUBD  #01
  169.      STD  EXPR,U
  170. *
  171.        ELSE
  172.      LDA  FRACTR,U
  173.      IFCC  GE       NOT NORMALIZED
  174.        IOP    16       SIGNAL INVALID OPERATION
  175. *
  176.      ENDIF           NOT NORMALIZED
  177. *
  178.        ENDIF           IS DENORMALIZED
  179. *
  180.      ENDIF           SINGLE OR DOUBLE
  181. *
  182.    ENDIF           NOT A ZERO
  183. *
  184.  ENDIF               NOT A NAN OR INFINITY
  185. *
  186. *
  187.  RTS               RETURN
  188. *
  189. *
  190.